package com.lantosec.hmrp.modules.supplier.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.supplier.entity.*;
import com.lantosec.hmrp.modules.supplier.vo.SupplierBadVO;
import com.lantosec.hmrp.modules.supplier.vo.SupplierInfoVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 供应商信息 Mapper 接口
 * </p>
 *
 * @author AutoCode
 * @since 2020-02-20
 */
public interface SupplierInfoMapper extends BaseMapper<SupplierInfo> {

    /**
     * 根据条件查询供应商信息（分页）
     *
     * @param page
     * @param supplierName
     * @param supplierType
     * @param entryState
     * @return
     */
    public PageVO<SupplierInfoVO> querySupplierInfoAll(PageVO<SupplierInfo> page, @Param("supplierName") String supplierName,
                                                       @Param("supplierType") String supplierType,
                                                       @Param("entryState") String entryState);

    /**
     * 分页查询本部门下的供应商信息
     *
     * @param page
     * @param supplierName
     * @param supplierType
     * @param deptId
     * @return
     */
    public PageVO<SupplierInfoVO> querySupplierInfoByDept(PageVO<SupplierInfo> page, @Param("supplierName") String supplierName,
                                                          @Param("supplierType") String supplierType,
                                                          @Param("deptId") String deptId);

    /**
     * 查询当前用户名的部门id
     *
     * @param userId
     * @return
     */
    public String getDeptId(@Param("userId") String userId);

    /**
     * 查询供应商详情信息
     *
     * @param supplierCode
     * @return
     */
    public SupplierInfoVO querySupplierInfoById(@Param("supplierCode") String supplierCode);

    /**
     * 查询全部供应商信息
     *
     * @return
     */
    public PageVO<YyGyslist> querySupplierCode(PageVO<YyGyslist> page, @Param("typeId") String typeId, @Param("name") String name);

    /**
     * 查询全部供应商类型
     *
     * @return
     */
    public List<YyGyslist> querySupplierType();

    /**
     * 查询当前是否已存在此供应商类型
     *
     * @param supplierType
     * @return
     */
    public Integer getSupplierType(@Param("supplierType") String supplierType);


    /**
     * 模糊查询供应商名称和编码
     *
     * @param name
     * @return
     */
    List<YyGyslist> querySupplierName(@Param("name") String name);

    /**
     * 查询供应商各个类型的分类数
     *
     * @return
     */
    List<SupplierTypeNum> getSupplierTypeNum();

    /**
     * 查询供应商已准入/未准入数
     *
     * @return
     */
    List<SupplierEntryNum> getSupplierEntryNum();

    /**
     * 查询供应商不良记录数
     *
     * @return
     */
    List<SupplierBadNum> getSupplierBadNum();

    /**
     * 查询物资目录列表
     *
     * @param supplierCode
     * @param materialId
     * @param materialName
     * @param factory
     * @return
     */
    PageVO<HisMaterialDir> getHisMaterialDir(PageVO<HisMaterialDir> page, @Param("supplierCode") String supplierCode, @Param("materialId") String materialId,
                                             @Param("materialName") String materialName, @Param("factory") String factory);

    /**
     * 查询药品目录列表
     *
     * @param supplierCode
     * @param drugId
     * @param drugName
     * @param factory
     * @return
     */
    PageVO<HisDrugDir> getHisDrugDir(PageVO<HisDrugDir> page, @Param("supplierCode") String supplierCode, @Param("drugId") String drugId,
                                     @Param("drugName") String drugName, @Param("factory") String factory);

    SupplierInfo getSupplierBaseInfo(String supplierCode);

    /**
     * 查询供应商业务信息列表
     *
     * @param page
     * @param supplierCode
     * @param goodsName
     * @param factoryName
     * @return
     */
    PageVO<HisInboundPay> getHisInboundPay(PageVO<HisInboundPay> page, @Param("supplierCode") String supplierCode, @Param("mainType") Integer mainType,
                                           @Param("goodsName") String goodsName, @Param("factoryName") String factoryName);

    /**
     * 查询系统中全部已准入的供应商
     *
     * @return
     */
    List<SupplierInfo> getSupplierEntryAll();

    /**
     * 查询供应商的不良记录
     * @param supplier
     * @return
     */
    SupplierBadVO getSupplierBadIfno(String supplier);
}
